/*
 * Created on 2007-6-26
 *
 */
package jacky.lanlan.song.jdbc;

import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Map;

/**
 * 数据库存储过程处理器。
 * @see RawJDBCHelper
 * @author Jacky.Song
 */
public interface ProcedureHandler {

	/**
	 * 在CallableStatement被创建好以后，执行proc.execute()前被调用。
	 * 客户端可以在这个方法内设置proc的参数，比如：
	 * <code><pre>
	 * proc.setXXX();
	 * proc.setXXX();
	 * proc.setXXX();
	 * proc.registerOutParameter();
	 * ...
	 * </pre></code>
	 * @see #RawJDBCHelper.handleProcedure()
	 * @param proc 根据RawJDBCHelper.handleProcedure()方法的sql参数创建好的语句
	 */
	public void beforeExecute(CallableStatement proc) throws SQLException;
	
	/**
	 * 在执行了proc.execute()后被调用。
	 * <p>
	 * 客户端可以在这个方法内处理proc的返回值，并把返回值装入rsValues中。<br>
	 * rsValues是一个空Map，客户端可以按序号存储返回值。比如：
	 * <code><pre>
	 * value1=proc.getXXX();
	 * value2=proc.getXXX();
	 * value3=proc.getXXX();
	 * rsValues.put(1, value1);
	 * rsValues.put(2, value2);
	 * rsValues.put(3, value3);
	 * </pre></code>
	 * @see #RawJDBCHelper.handleProcedure()
	 * @param proc 执行后的CallableStatement 
	 * @param rsValues 一个装载返回值的空Map
	 * @return 如果在操作proc的时候用到了ResultSet，返回它，RawJDBCHelper.handleProcedure()
	 * 会自动处理关闭，如果没有返回null即可
	 */
	public ResultSet afterExecute(CallableStatement proc,Map<Integer, Object> rsValues) throws SQLException;
	
}
